package com.gdust.spzx.common.exception;

import com.gdust.hzx.model.vo.common.Result;
import com.gdust.hzx.model.vo.common.ResultCodeEnum;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * ClassName: GlobalExceptionHandler
 * Package: com.gdust.spzx.common.exception
 * Description: 统一异常处理类，用于处理全局和自定义异常，保证系统的稳定性和一致性
 *
 * @Author syun
 * @Create 2024/11/2 23:27
 * @Version 1.0
 */
public class GlobalExceptionHandler {

    /**
     * 全局异常处理方法，捕获所有未被捕获的异常
     *
     * @param e 捕获的异常对象
     * @return 返回封装的错误信息，使用 Result 封装响应结果
     */
    @ExceptionHandler(Exception.class) // 指定处理所有 Exception 异常
    @ResponseBody // 将返回的结果作为 JSON 响应体返回给客户端
    public Result error(Exception e) {
        e.printStackTrace(); // 打印异常堆栈跟踪，方便调试
        return Result.build(null, ResultCodeEnum.SYSTEM_ERROR); // 返回通用的系统错误信息
    }

    /**
     * 通过全局异常捕获到抛出的GuiguException。
     * 自定义异常处理方法，专门处理 GdustException 异常
     *
     * @param e 捕获的 GdustException 对象
     * @return 返回封装的错误信息，带有自定义错误码和描述
     */
    @ExceptionHandler(GdustException.class) // 指定处理自定义的 GdustException 异常
    @ResponseBody // 将返回的结果作为 JSON 响应体返回给客户端
    public Result error(GdustException e) {
        return Result.build(null, e.getResultCodeEnum()); // 返回异常中包含的具体错误码和消息
    }
}
